import axios from 'axios'
import { getLocal, clearLocal, setLocal } from "@/utils/local";
import { Message } from 'element-ui'
// 1、默认请求地址
axios.defaults.baseURL = 'http://127.0.0.1:5000'

// 2、默认超时时间
axios.defaults.timeout = 10000

// 3、请求拦截器，作用：携带统一参数
axios.interceptors.request.use(config => {
    // 从本地存储获取token

    const token = getLocal('t_t');
    config.headers.authorization = token

    //config请求信息对象
    return config
}, err => {
    //如果请求错了，就跑出错误信息
    //err 错误信息
    return Promise.reject(err)
})

//4、响应拦截器 作用：统一处理状态码（正确&错误）
axios.interceptors.response.use(response => {
    //response 响应信息对象
    let { code, msg } = response.data

    // 根据不同的code值给提示框
    switch (code) {
        case 0://成功
            Message.success(msg)
            break;
        case 1:
            Message.error(msg)
            break;
        case 5001:
            Message.error(msg)
            break;
        default:
            break;
    }
    return response
}, err => {
    console.log(err);
    let { status } = err.response
    switch (status) {
        case 0:
            Message.error('网络错误')
            break;
        case 401://用户token失效，后台设置的token超时
            // 1、重新登录
            // 清空基本信息
            clearLocal()
            // 保存当前页面地址到本地
            setLocal('redirectUrl', location.href)
            // 保存到本地需要时间，所有设置一个定时器在跳转到登录页
            setTimeout(() => {
                router.push('/login')
            }, 500)
            Message.error('用户身份错误')
            break;
        case 403:
            Message.error('用户没有权限')
            break;
        case 404:
            Message.error('404 notFound')
            break;
        case 500:
            Message.error('err.message')
            break;
        default:
            break;
    }
    return Promise.reject(err)
})

// 4、导出配置好的axios工具函数
export default axios